package apibasej.db.transaction;

import java.util.TreeMap;

import apibasej.db.sql.wrapper.ColSelect;
import apibasej.db.sql.wrapper.OrderBy;

public class ManagerOrderBy {

	
	// adiciona as colunas e organiza no TreeMap os colunas OrderBy ...
	private TreeMap<Integer,OrderBy<?>> colsOrderBy = new TreeMap<Integer, OrderBy<?>>();
	private int ctAux = 0;
	private int sizeCols;
	private ColSelect<?> colPkAux;
	
	public ManagerOrderBy(int sizeCols) {
		super();
		this.sizeCols = sizeCols;
	}

	// para ir verificando as colunas e suas ordens
	@SuppressWarnings({"unchecked","rawtypes"})
	public void verifyOrderBy(ColSelect<?> cs, Integer orderBy, Boolean isDesc){
		if(orderBy!=null){// se não tiver atributo para order não adiciona no order by
			OrderBy<?> ob = new OrderBy(cs);//pr.createOrderBy(tcs, tabs);
			if(isDesc!=null) ob.setIsDesc(isDesc);
			colsOrderBy.put((sizeCols*orderBy)+ctAux, ob); // coloquei (sizeCols*tcs.getOrderBy())+ctAux para caso tenha duas colunas com o mesmo orderBy, colocar na orderm das colunas recebidas
		}
		if(cs.getCol().isPk() && colPkAux==null){// colPkAux==null para adicionar o primeiro field PK
			colPkAux = cs;
		}
	}
	
	// chamar depois de verificar todas colunas
	// isPkDesc: se for null não adiciona, se true pk DESC e se false pk ASC
	public void addOrderByInUtilDB(UtilDB db, Boolean isPkDesc){
		boolean noOrder = true;
		for(Integer k : colsOrderBy.keySet()){
			OrderBy<?> w = colsOrderBy.get(k);
			db.addColOrderBy(w);
			noOrder = false;
		}
		if(noOrder && isPkDesc!=null && colPkAux!=null){
			db.addColOrderBy(colPkAux).setIsDesc(isPkDesc);
		}
	}
	
}
